home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Dialogs.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  16KB  |  478 lines

  1. /*
  2.      File:        Dialogs.h
  3.  
  4.      Contains:    Dialog Manager interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __DIALOGS__
  19. #define __DIALOGS__
  20.  
  21. #ifndef __ERRORS__
  22. #include <Errors.h>
  23. #endif
  24. #ifndef __MEMORY__
  25. #include <Memory.h>
  26. #endif
  27. #ifndef __MENUS__
  28. #include <Menus.h>
  29. #endif
  30. #ifndef __CONTROLS__
  31. #include <Controls.h>
  32. #endif
  33. #ifndef __WINDOWS__
  34. #include <Windows.h>
  35. #endif
  36. #ifndef __TEXTEDIT__
  37. #include <TextEdit.h>
  38. #endif
  39. #ifndef __EVENTS__
  40. #include <Events.h>
  41. #endif
  42.  
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46.  
  47. #if PRAGMA_IMPORT_SUPPORTED
  48. #pragma import on
  49. #endif
  50.  
  51. #if PRAGMA_ALIGN_SUPPORTED
  52. #pragma options align=mac68k
  53. #endif
  54.  
  55. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  56.  
  57. enum {
  58.     ctrlItem                    = 4,
  59.     btnCtrl                        = 0,
  60.     chkCtrl                        = 1,
  61.     radCtrl                        = 2,
  62.     resCtrl                        = 3,
  63.     statText                    = 8,
  64.     editText                    = 16,
  65.     iconItem                    = 32,
  66.     picItem                        = 64,
  67.     userItem                    = 0,
  68.     itemDisable                    = 128,
  69.     ok                            = 1,
  70.     cancel                        = 2,
  71.     stopIcon                    = 0,
  72.     noteIcon                    = 1,
  73.     cautionIcon                    = 2
  74. };
  75.  
  76.  
  77. enum {
  78.                                                                 /* new, more standard names for dialog item constants */
  79.     kControlDialogItem            = 4,
  80.     kButtonDialogItem            = kControlDialogItem | 0,
  81.     kCheckBoxDialogItem            = kControlDialogItem | 1,
  82.     kRadioButtonDialogItem        = kControlDialogItem | 2,
  83.     kResourceControlDialogItem    = kControlDialogItem | 3,
  84.     kStaticTextDialogItem        = 8,
  85.     kEditTextDialogItem            = 16,
  86.     kIconDialogItem                = 32,
  87.     kPictureDialogItem            = 64,
  88.     kUserDialogItem                = 0,                            /* misc. constants */
  89.     kItemDisableBit                = 128,
  90.     kStdOkItemIndex                = 1,
  91.     kStdCancelItemIndex            = 2,                            /* standard icon resource id's */
  92.     kStopIcon                    = 0,
  93.     kNoteIcon                    = 1,
  94.     kCautionIcon                = 2
  95. };
  96.  
  97. #if OLDROUTINENAMES
  98. /*
  99.  These constants lived briefly on ETO 16.  They suggest
  100.  that there is only one index you can use for the OK 
  101.  item, which is not true.  You can put the ok item 
  102.  anywhere you want in the DITL.
  103. */
  104.  
  105. enum {
  106.     kOkItemIndex                = 1,
  107.     kCancelItemIndex            = 2
  108. };
  109.  
  110. #endif
  111. /*    Dialog Item List Manipulation Constants    */
  112. typedef SInt16 DITLMethod;
  113.  
  114. enum {
  115.     overlayDITL                    = 0,
  116.     appendDITLRight                = 1,
  117.     appendDITLBottom            = 2
  118. };
  119.  
  120. typedef SInt16 StageList;
  121. typedef DialogPtr DialogRef;
  122. struct DialogRecord {
  123.     WindowRecord                     window;
  124.     Handle                             items;
  125.     TEHandle                         textH;
  126.     SInt16                             editField;
  127.     SInt16                             editOpen;
  128.     SInt16                             aDefItem;
  129. };
  130. typedef struct DialogRecord DialogRecord;
  131.  
  132. typedef DialogRecord *DialogPeek;
  133. struct DialogTemplate {
  134.     Rect                             boundsRect;
  135.     SInt16                             procID;
  136.     Boolean                         visible;
  137.     Boolean                         filler1;
  138.     Boolean                         goAwayFlag;
  139.     Boolean                         filler2;
  140.     SInt32                             refCon;
  141.     SInt16                             itemsID;
  142.     Str255                             title;
  143. };
  144. typedef struct DialogTemplate DialogTemplate;
  145.  
  146. typedef DialogTemplate *DialogTPtr;
  147. typedef DialogTPtr *DialogTHndl;
  148. struct AlertTemplate {
  149.     Rect                             boundsRect;
  150.     SInt16                             itemsID;
  151.     StageList                         stages;
  152. };
  153. typedef struct AlertTemplate AlertTemplate;
  154.  
  155. typedef AlertTemplate *AlertTPtr;
  156. typedef AlertTPtr *AlertTHndl;
  157. /* new type abstractions for the dialog manager */
  158. typedef SInt16 DialogItemIndexZeroBased;
  159. typedef SInt16 DialogItemIndex;
  160. typedef SInt16 DialogItemType;
  161. /* dialog manager callbacks */
  162. typedef pascal void (*SoundProcPtr)(SInt16 soundNumber);
  163.  
  164. #if GENERATINGCFM
  165. typedef UniversalProcPtr SoundUPP;
  166. #else
  167. typedef SoundProcPtr SoundUPP;
  168. #endif
  169.  
  170. enum {
  171.     uppSoundProcInfo = kPascalStackBased
  172.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SInt16)))
  173. };
  174.  
  175. #if GENERATINGCFM
  176. #define NewSoundProc(userRoutine)        \
  177.         (SoundUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSoundProcInfo, GetCurrentArchitecture())
  178. #else
  179. #define NewSoundProc(userRoutine)        \
  180.         ((SoundUPP) (userRoutine))
  181. #endif
  182.  
  183. #if GENERATINGCFM
  184. #define CallSoundProc(userRoutine, soundNumber)        \
  185.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSoundProcInfo, (soundNumber))
  186. #else
  187. #define CallSoundProc(userRoutine, soundNumber)        \
  188.         (*(userRoutine))((soundNumber))
  189. #endif
  190. typedef pascal Boolean (*ModalFilterProcPtr)(DialogRef theDialog, EventRecord *theEvent, DialogItemIndex *itemHit);
  191.  
  192. #if GENERATINGCFM
  193. typedef UniversalProcPtr ModalFilterUPP;
  194. #else
  195. typedef ModalFilterProcPtr ModalFilterUPP;
  196. #endif
  197.  
  198. enum {
  199.     uppModalFilterProcInfo = kPascalStackBased
  200.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  201.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogRef)))
  202.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord *)))
  203.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(DialogItemIndex *)))
  204. };
  205.  
  206. #if GENERATINGCFM
  207. #define NewModalFilterProc(userRoutine)        \
  208.         (ModalFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppModalFilterProcInfo, GetCurrentArchitecture())
  209. #else
  210. #define NewModalFilterProc(userRoutine)        \
  211.         ((ModalFilterUPP) (userRoutine))
  212. #endif
  213.  
  214. #if GENERATINGCFM
  215. #define CallModalFilterProc(userRoutine, theDialog, theEvent, itemHit)        \
  216.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppModalFilterProcInfo, (theDialog), (theEvent), (itemHit))
  217. #else
  218. #define CallModalFilterProc(userRoutine, theDialog, theEvent, itemHit)        \
  219.         (*(userRoutine))((theDialog), (theEvent), (itemHit))
  220. #endif
  221. typedef pascal void (*UserItemProcPtr)(WindowRef theWindow, DialogItemIndex itemNo);
  222.  
  223. #if GENERATINGCFM
  224. typedef UniversalProcPtr UserItemUPP;
  225. #else
  226. typedef UserItemProcPtr UserItemUPP;
  227. #endif
  228.  
  229. enum {
  230.     uppUserItemProcInfo = kPascalStackBased
  231.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowRef)))
  232.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DialogItemIndex)))
  233. };
  234.  
  235. #if GENERATINGCFM
  236. #define NewUserItemProc(userRoutine)        \
  237.         (UserItemUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserItemProcInfo, GetCurrentArchitecture())
  238. #else
  239. #define NewUserItemProc(userRoutine)        \
  240.         ((UserItemUPP) (userRoutine))
  241. #endif
  242.  
  243. #if GENERATINGCFM
  244. #define CallUserItemProc(userRoutine, theWindow, itemNo)        \
  245.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppUserItemProcInfo, (theWindow), (itemNo))
  246. #else
  247. #define CallUserItemProc(userRoutine, theWindow, itemNo)        \
  248.         (*(userRoutine))((theWindow), (itemNo))
  249. #endif
  250. /*
  251.     NOTE: Code running under MultiFinder or System 7.0 or newer
  252.     should always pass NULL to InitDialogs.
  253. */
  254. extern pascal void InitDialogs(void *ignored)
  255.  ONEWORDINLINE(0xA97B);
  256.  
  257. extern pascal void ErrorSound(SoundUPP soundProc)
  258.  ONEWORDINLINE(0xA98C);
  259.  
  260. extern pascal DialogRef NewDialog(void *wStorage, const Rect *boundsRect, ConstStr255Param title, Boolean visible, SInt16 procID, WindowRef behind, Boolean goAwayFlag, SInt32 refCon, Handle itmLstHndl)
  261.  ONEWORDINLINE(0xA97D);
  262.  
  263. extern pascal DialogRef GetNewDialog(SInt16 dialogID, void *dStorage, WindowRef behind)
  264.  ONEWORDINLINE(0xA97C);
  265.  
  266. extern pascal DialogRef NewColorDialog(void *dStorage, const Rect *boundsRect, ConstStr255Param title, Boolean visible, SInt16 procID, WindowRef behind, Boolean goAwayFlag, SInt32 refCon, Handle items)
  267.  ONEWORDINLINE(0xAA4B);
  268.  
  269. extern pascal void CloseDialog(DialogRef theDialog)
  270.  ONEWORDINLINE(0xA982);
  271.  
  272. extern pascal void DisposeDialog(DialogRef theDialog)
  273.  ONEWORDINLINE(0xA983);
  274.  
  275. extern pascal void ModalDialog(ModalFilterUPP modalFilter, DialogItemIndex *itemHit)
  276.  ONEWORDINLINE(0xA991);
  277.  
  278. extern pascal Boolean IsDialogEvent(const EventRecord *theEvent)
  279.  ONEWORDINLINE(0xA97F);
  280.  
  281. extern pascal Boolean DialogSelect(const EventRecord *theEvent, DialogRef *theDialog, DialogItemIndex *itemHit)
  282.  ONEWORDINLINE(0xA980);
  283.  
  284. extern pascal void DrawDialog(DialogRef theDialog)
  285.  ONEWORDINLINE(0xA981);
  286.  
  287. extern pascal void UpdateDialog(DialogRef theDialog, RgnHandle updateRgn)
  288.  ONEWORDINLINE(0xA978);
  289.  
  290. extern pascal void HideDialogItem(DialogRef theDialog, DialogItemIndex itemNo)
  291.  ONEWORDINLINE(0xA827);
  292.  
  293. extern pascal void ShowDialogItem(DialogRef theDialog, DialogItemIndex itemNo)
  294.  ONEWORDINLINE(0xA828);
  295.  
  296. extern pascal DialogItemIndexZeroBased FindDialogItem(DialogRef theDialog, Point thePt)
  297.  ONEWORDINLINE(0xA984);
  298.  
  299. extern pascal void DialogCut(DialogRef theDialog);
  300.  
  301. extern pascal void DialogPaste(DialogRef theDialog);
  302.  
  303. extern pascal void DialogCopy(DialogRef theDialog);
  304.  
  305. extern pascal void DialogDelete(DialogRef theDialog);
  306.  
  307. extern pascal DialogItemIndex Alert(SInt16 alertID, ModalFilterUPP modalFilter)
  308.  ONEWORDINLINE(0xA985);
  309.  
  310. extern pascal DialogItemIndex StopAlert(SInt16 alertID, ModalFilterUPP modalFilter)
  311.  ONEWORDINLINE(0xA986);
  312.  
  313. extern pascal DialogItemIndex NoteAlert(SInt16 alertID, ModalFilterUPP modalFilter)
  314.  ONEWORDINLINE(0xA987);
  315.  
  316. extern pascal DialogItemIndex CautionAlert(SInt16 alertID, ModalFilterUPP modalFilter)
  317.  ONEWORDINLINE(0xA988);
  318.  
  319. extern pascal void GetDialogItem(DialogRef theDialog, DialogItemIndex itemNo, DialogItemType *itemType, Handle *item, Rect *box)
  320.  ONEWORDINLINE(0xA98D);
  321.  
  322. extern pascal void SetDialogItem(DialogRef theDialog, DialogItemIndex itemNo, DialogItemType itemType, Handle item, const Rect *box)
  323.  ONEWORDINLINE(0xA98E);
  324.  
  325. extern pascal void ParamText(ConstStr255Param param0, ConstStr255Param param1, ConstStr255Param param2, ConstStr255Param param3)
  326.  ONEWORDINLINE(0xA98B);
  327.  
  328. extern pascal void SelectDialogItemText(DialogRef theDialog, DialogItemIndex itemNo, SInt16 strtSel, SInt16 endSel)
  329.  ONEWORDINLINE(0xA97E);
  330.  
  331. extern pascal void GetDialogItemText(Handle item, Str255 text)
  332.  ONEWORDINLINE(0xA990);
  333.  
  334. extern pascal void SetDialogItemText(Handle item, ConstStr255Param text)
  335.  ONEWORDINLINE(0xA98F);
  336.  
  337. extern pascal SInt16 GetAlertStage(void)
  338.  TWOWORDINLINE(0x3EB8, 0x0A9A);
  339.  
  340. extern DialogRef newdialog(void *wStorage, const Rect *boundsRect, const char *title, Boolean visible, SInt16 procID, WindowRef behind, Boolean goAwayFlag, SInt32 refCon, Handle itmLstHndl);
  341.  
  342. extern DialogRef newcolordialog(void *dStorage, const Rect *boundsRect, const char *title, Boolean visible, SInt16 procID, WindowRef behind, Boolean goAwayFlag, SInt32 refCon, Handle items);
  343.  
  344. extern pascal void SetDialogFont(SInt16 value)
  345.  TWOWORDINLINE(0x31DF, 0x0AFA);
  346.  
  347. extern pascal void ResetAlertStage(void )
  348.  TWOWORDINLINE(0x4278, 0x0A9A);
  349.  
  350. #if CGLUESUPPORTED
  351. extern void paramtext(const char *param0, const char *param1, const char *param2, const char *param3);
  352.  
  353. extern void getdialogitemtext(Handle item, char *text);
  354.  
  355. extern void setdialogitemtext(Handle item, const char *text);
  356.  
  357. extern DialogItemIndexZeroBased finddialogitem(DialogRef theDialog, Point *thePt);
  358.  
  359. #endif
  360. extern pascal void AppendDITL(DialogRef theDialog, Handle theHandle, DITLMethod method);
  361.  
  362. extern pascal DialogItemIndex CountDITL(DialogRef theDialog);
  363.  
  364. extern pascal void ShortenDITL(DialogRef theDialog, DialogItemIndex numberItems);
  365.  
  366. extern pascal Boolean StdFilterProc(DialogRef theDialog, EventRecord *event, DialogItemIndex *itemHit);
  367.  
  368. extern pascal OSErr GetStdFilterProc(ModalFilterUPP *theProc)
  369.  THREEWORDINLINE(0x303C, 0x0203, 0xAA68);
  370.  
  371. extern pascal OSErr SetDialogDefaultItem(DialogRef theDialog, DialogItemIndex newItem)
  372.  THREEWORDINLINE(0x303C, 0x0304, 0xAA68);
  373.  
  374. extern pascal OSErr SetDialogCancelItem(DialogRef theDialog, DialogItemIndex newItem)
  375.  THREEWORDINLINE(0x303C, 0x0305, 0xAA68);
  376.  
  377. extern pascal OSErr SetDialogTracksCursor(DialogRef theDialog, Boolean tracks)
  378.  THREEWORDINLINE(0x303C, 0x0306, 0xAA68);
  379.  
  380. #if OLDROUTINENAMES
  381. #define DisposDialog(theDialog) DisposeDialog(theDialog)
  382. #define UpdtDialog(theDialog, updateRgn) UpdateDialog(theDialog, updateRgn)
  383. #define GetDItem(theDialog, itemNo, itemType, item, box) GetDialogItem(theDialog, itemNo, itemType, item, box)
  384. #define SetDItem(theDialog, itemNo, itemType, item, box) SetDialogItem(theDialog, itemNo, itemType, item, box)
  385. #define HideDItem(theDialog, itemNo) HideDialogItem(theDialog, itemNo)
  386. #define ShowDItem(theDialog, itemNo) ShowDialogItem(theDialog, itemNo)
  387. #define SelIText(theDialog, itemNo, strtSel, endSel) SelectDialogItemText(theDialog, itemNo, strtSel, endSel)
  388. #define GetIText(item, text) GetDialogItemText(item, text)
  389. #define SetIText(item, text) SetDialogItemText(item, text)
  390. #define FindDItem(theDialog, thePt) FindDialogItem(theDialog, thePt)
  391. #define NewCDialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) \
  392. NewColorDialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items)
  393. #define GetAlrtStage() GetAlertStage()
  394. #define ResetAlrtStage() ResetAlertStage()
  395. #define DlgCut(theDialog) DialogCut(theDialog)
  396. #define DlgPaste(theDialog) DialogPaste(theDialog)
  397. #define DlgCopy(theDialog) DialogCopy(theDialog)
  398. #define DlgDelete(theDialog) DialogDelete(theDialog)
  399. #define SetDAFont(fontNum) SetDialogFont(fontNum)
  400. #if CGLUESUPPORTED
  401. #define newcdialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items) \
  402. newcolordialog(dStorage, boundsRect, title, visible, procID, behind, goAwayFlag, refCon, items)
  403. #define getitext(item, text) getdialogitemtext(item, text)
  404. #define setitext(item, text) setdialogitemtext(item, text)
  405. #define findditem(theDialog, thePt) finddialogitem(theDialog, thePt)
  406. #endif
  407. #endif
  408. /*
  409. *****************************************************************************
  410. *                                                                           *
  411. * The conditional STRICT_DIALOGS has been removed from this interface file. *
  412. * The accessor macros to a DialogRecord are no longer necessary.            *
  413. *                                                                           *
  414. *****************************************************************************
  415.  
  416. Details:
  417. The original purpose of the STRICT_ conditionals and accessor macros was to
  418. help ease the transition to Copland.   Shared data structures are difficult
  419. to coordinate in a preemptive multitasking OS.  By hiding the fields in a
  420. WindowRecord and other data structures, we would begin the migration to 
  421. system data structures being completely hidden from applications. 
  422.  
  423. After many design reviews, it was finally concluded that with this sort of
  424. migration, the system could never tell when an application was no longer 
  425. peeking at a WindowRecord, and thus the data structure might never become 
  426. system owned.  Additionally, there were many other limitations in the classic
  427. toolbox that were begging to be addressed.
  428.  
  429. The final decision was to leave the traditional toolbox as a compatibility mode.
  430. The preferred toolbox API for Copland is a new SOM(tm) based architecture 
  431. (e.g. HIWindows.idl).  Windows, menu, controls, etc are each a SOM object 
  432. with methods for drawing, event handling, and customization.
  433.  
  434. */
  435. #ifdef __cplusplus
  436. inline WindowRef     GetDialogWindow(DialogRef dialog)        { return (WindowRef) dialog;                         }
  437. inline SInt16        GetDialogDefaultItem(DialogRef dialog)  { return (*(SInt16 *) (((UInt8 *) dialog) + 168));    }
  438. inline SInt16        GetDialogCancelItem(DialogRef dialog)     { return (*(SInt16 *) (((UInt8 *) dialog) + 166));    }
  439. inline SInt16        GetDialogKeyboardFocusItem(DialogRef dialog)    { return ((*(SInt16 *) (((UInt8 *) dialog) + 164)) < 0 ? -1 : (*(SInt16 *) (((UInt8 *) dialog) + 164)) + 1); }
  440. inline void        SetGrafPortOfDialog(DialogRef dialog) { SetPort ((GrafPtr) dialog); }
  441. #else
  442. #define GetDialogWindow(dialog)    ((WindowRef) dialog)
  443. #define GetDialogDefaultItem(dialog) (*(SInt16 *) (((UInt8 *) dialog) + 168))
  444. #define GetDialogCancelItem(dialog) (*(SInt16 *) (((UInt8 *) dialog) + 166))
  445. #define GetDialogKeyboardFocusItem(dialog) ((*(SInt16 *) (((UInt8 *) dialog) + 164)) < 0 ? -1 : (*(SInt16 *) (((UInt8 *) dialog) + 164)) + 1)
  446. #define SetGrafPortOfDialog(dialog) do { SetPort ((GrafPtr) dialog); } while (false);
  447. #endif
  448. #endif
  449. #if FOR_SYSTEM7_ONLY
  450. extern pascal void CouldDialog(SInt16 dialogID)
  451.  ONEWORDINLINE(0xA979);
  452.  
  453. extern pascal void FreeDialog(SInt16 dialogID)
  454.  ONEWORDINLINE(0xA97A);
  455.  
  456. extern pascal void CouldAlert(SInt16 alertID)
  457.  ONEWORDINLINE(0xA989);
  458.  
  459. extern pascal void FreeAlert(SInt16 alertID)
  460.  ONEWORDINLINE(0xA98A);
  461.  
  462. #endif
  463.  
  464. #if PRAGMA_ALIGN_SUPPORTED
  465. #pragma options align=reset
  466. #endif
  467.  
  468. #if PRAGMA_IMPORT_SUPPORTED
  469. #pragma import off
  470. #endif
  471.  
  472. #ifdef __cplusplus
  473. }
  474. #endif
  475.  
  476. #endif /* __DIALOGS__ */
  477.  
  478.